package v1

import (
	"github.com/gogf/gf/v2/frame/g"
	"goAdminV1/utility"
)

// RoleListReq 定义获取角色列表的请求结构体
type RoleListReq struct {
	g.Meta   `path:"/permissions/roles" method:"get" tags:"角色管理" summary:"获取角色列表"`
	RoleName string `json:"role_name" in:"query"  dc:"角色名称"`
	Limit    int    `json:"limit" form:"limit" d:"10" v:"min:10#每页数量不能小于1"`
	Page     int    `json:"page" form:"page" d:"1" v:"min:1#页码为必传参数且不能小于1"`
}

// RoleListRes 定义响应结构体
type RoleListRes struct {
	utility.PaginatedResponse
}

// RoleInfoReq 定义获取角色详情的请求结构体
type RoleInfoReq struct {
	g.Meta `path:"/permissions/roles/{id}" method:"get" tags:"角色管理" summary:"获取角色列表"`
	Id     int `json:"id" v:"required#角色Id不能为空"`
}

// RoleInfoRes 定义获取角色详情的请求结构体
type RoleInfoRes struct {
	Id          int    `json:"id"`
	RoleName    string `json:"role_name"`
	Identify    string `json:"identify"`
	ParentId    int    `json:"parent_id"`
	Description string `json:"description"`
	DataRange   int    `json:"data_range"`
	CreatorId   int    `json:"creator_id"`
	CreatedAt   string `json:"created_at"` // 时间戳转换为字符串
	UpdatedAt   string `json:"updated_at"` // 时间戳转换为字符串
	Permission  []int  `json:"permission"`
}

// RoleInfo 定义单个角色的结构体
type RoleInfo struct {
	Id          int                  `json:"id"`
	RoleName    string               `json:"role_name"`
	Identify    string               `json:"identify"`
	ParentId    int                  `json:"parent_id"`
	Permissions []RoleListPermission `json:"permissions"`
	Creator     string               `json:"creator"`
	Description string               `json:"description"`
	DataRange   int                  `json:"data_range"`
	CreatedAt   string               `json:"created_at"`
}

// RoleListPermission 定义一个结构体来表示权限项
type RoleListPermission struct {
	ID int `json:"id"`
}

// RoleCreateReq 角色创建请求结构体
type RoleCreateReq struct {
	g.Meta      `path:"/permissions/roles" method:"post" tags:"角色管理" summary:"Create Role"`
	RoleName    string   `json:"role_name" v:"required#角色名称不能为空"`
	ParentId    int      `json:"parent_id,omitempty"`
	Identify    string   `json:"identify" v:"required#角色标识不能为空"`
	Description string   `json:"description,omitempty"`
	DataRange   int      `json:"data_range,omitempty"`
	Departments string   `json:"departments,omitempty"`
	Permissions []string `json:"permissions,omitempty"`
}

// RoleCreateRes 角色创建响应结构体
type RoleCreateRes struct {
	RoleId  int    `json:"role_id"`
	Message string `json:"message"`
}

// RoleUpdateReq 角色更新请求结构体
type RoleUpdateReq struct {
	g.Meta      `path:"/ permissions/roles/{id}" method:"put" tags:"角色管理" summary:"Update Role"`
	Id          int      `json:"id" v:"required#角色Id不能为空"`
	RoleName    string   `json:"role_name" v:"required#角色名称不能为空"`
	ParentId    int      `json:"parent_id,omitempty"`
	Identify    string   `json:"identify" v:"required#角色标识不能为空"`
	Description string   `json:"description,omitempty"`
	DataRange   string   `json:"data_range,omitempty"`
	Departments string   `json:"departments,omitempty"`
	Permissions []string `json:"permissions,omitempty"`
}

// RoleUpdateRes 角色更新响应结构体
type RoleUpdateRes struct {
	RoleId  int    `json:"role_id"`
	Message string `json:"message"`
}

// RoleDeleteReq 角色删除请求结构体
type RoleDeleteReq struct {
	g.Meta `path:"/permissions/roles/{id}" method:"delete" tags:"角色管理" summary:"Delete Role"`
	Id     int `json:"id" v:"required#角色Id不能为空"`
}

// RoleDeleteRes 角色删除响应结构体
type RoleDeleteRes struct {
	RoleId  int    `json:"role_id"`
	Message string `json:"message"`
}
